package com.cskaoyan.javase.array._2memory;

/**
 * 数组的静态初始化
 *
 * 思考:
 * 引用数据类型元素如果有默认值,它的默认值是null
 * 那么这里数组的静态初始化,已经明确指出了数组元素的取值
 * 那么它还有默认值吗?还有默认初始化的过程吗?
 * 有,默认初始化需要先给元素赋默认值
 * 然后在默认值的基础上 进行其他赋值
 *
 * Java中对象中的元素的初始化，不管是现在的数组对象，还是以后的各种对象中的元素
 * 它们元素的取值都是先具有默认值，永远先进行默认初始化
 * 不管后面学习多少种给对象中的元素赋值的方式
 * 它们永远在默认初始化之后进行
 * 也就是说任何给对象中元素赋值的手段，都要在默认值的基础上进行。
 *
 * 一个经典的初学者问题
 * 既然引用数据类型具有默认初始化，对象中的元素具有默认值，那为什么声明一个数组后为什么不能立刻使用呢？
 * 引用数据类型具有默认初始化，指的是处在对象中的引用数据类型元素具有默认初始化
 * 或者引用数据类型对象中的元素具有默认初始化
 *
 * 但是直接声明数组，数组名是一个局部变量，局部变量没有默认值，需要手动初始化
 *
 * @since 11:23
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo4 {
    public static void main(String[] args) {
        /*
            引用数据类型数组中要存储引用数据类型元素
            存储的是该引用数据类型元素的引用(地址)
         */
        String[] arr = {"777", "666"};
        /*
            [Ljava.lang.String;@1540e19d
            [L表示这是一个一维数组
            java.lang.String; 字符串String的全限定类名
            @1540e19d 仍然是一个十六进制地址值
         */
        /*System[] arr2 = new System[3];
        System.out.println(arr2);*/
        System.out.println(arr);
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        arr[0] = "888";
        System.out.println(arr[0]);
        System.out.println(arr);
        System.out.println(arr.length);
    }
}
